package com.qyer.lxp.service.product;


import com.qyer.lxp.model.location.normal.Location;
import com.qyer.lxp.model.product.lastminute.Lastminute_all;
import com.qyer.lxp.model.product.lastminute.Lastminute_category;
import com.qyer.lxp.model.product.normal.*;
import com.qyer.lxp.model.product.normal.ProductPickInfo;
import com.qyer.lxp.model.product.parameter.PickOrDropRequest;
import com.qyer.lxp.model.product.parameter.ProductCodeSearchRequest;
import com.qyer.lxp.model.product.parameter.ProductInfoRequest;
import com.qyer.lxp.model.product.parameter.SaleItemInfoRequest;

import java.util.List;
import java.util.Map;

/**
 * 产品信息接口类
 * Created by jiangping on 16/5/13.
 */
public interface IProductService {

    /**
     * 获取产品code以及更新时间接口
     * @param productCodeSearchRequest  获取产品信息调用参数
     * @return  返回产品信息
     * @throws Exception
     */
    public List<ProductCodeInfo> getUpdateProductInfo(ProductCodeSearchRequest productCodeSearchRequest);

    /**
     * 获取接送信息接口
     * @param pickOrDropRequest 获取接机信息调用参数
     * @return  返回接机对象
     * @throws Exception
     */
    public List<ProductPickInfo> getPickOrDrop(PickOrDropRequest pickOrDropRequest);

    /**
     * 销售项目基本信息接口
     * @param saleItemInfoRequest 请求参数
     * @return 返回销售基本信息对象
     * @throws Exception
     */
    public List<SaleItemInfo> getSaleItemInfo(SaleItemInfoRequest saleItemInfoRequest);

    /**
     * 批量插入接送信息接口
     * 根据产品 code 查询接送信息
     * @param pickDropModelList 接送机参数
     * @throws Exception
     */
    public void insertPickDrop(List<PickDropModel> pickDropModelList);

    public Map<String,String> getProductCode(int type);

    /**
     * 定时批量插入接送信息接口
     * @param productCodeList 产品编号列表
     */
    public void insertPickDropBatch(List<String> productCodeList);

    /**
     * 批量删除指定的接送信息
     * @param ids  需要删除的ID集合
     * @return  返回删除结果
     * @throws Exception
     */
    public int deleteBacthByPrimaryKey(List<Integer> ids);

    /**
     * 根据量获取到的产品信息,将产品接送信息批量更新到数据库
     * @param productCodeList 产品号列表
     */
    public void updateBatchPickDrop(List<String> productCodeList);

    /**
     * 删除指定产品的接送信息
     * @param productCode  需要删除的productCode
     * @return  返回删除结果
     * @throws Exception
     */
    public int deleteByProductCode(String productCode);

    /**
     * 插入产品信息
     * @param model
     * @return
     */
    public int insertProductInfo(ProductInfo model);

    /**
     * 获取产品详细信息
     *
     * @param productInfoRequest 获取产品信息调用参数
     * @return 返回产品信息
     * @throws Exception
     */
    public ProductInfo getProductInfo(ProductInfoRequest productInfoRequest);

    /**
     * 获得产品信息
     * @return
     */
    public ProductInfo getProductInfo(String productCode);

    /**
     * 插入产品预定问题信息
     * @param model
     * @return
     */
    public int insertProductBookQuestion(ProductBookQuestion model);

    /**
     * 插入产品描述信息
     * @param model
     * @return
     */
    public int insertProductDesc(ProductDesc model);

    /**
     * 插入产品扩展字段信息
     * @param model
     * @return
     */
    public int insertProductExtendPropertie(ProductExtendPropertie model);

    /**
     * 获得产品描述信息
     * @return
     */
    public List<ProductDesc> getProductDesc(String productCode);

    /**
     * 插入产品规格信息
     * @param model
     * @return
     */
    public int insertProductInclude(ProductInclude model);

    /**
     * 获得产品规格
     * @return
     */
    public List<ProductInclude> getProductInclude(String specficationId);

    /**
     * 插入产品行程描述
     * @param model
     * @return
     */
    public int insertProductItinerary(ProductItinerary model);

    /**
     * 获得产品行程描述
     * @return
     */
    public List<ProductItinerary> getProductItinerary(String productCode);



    /**
     * 插入产品行程描述酒店信息
     * @param model
     * @return
     */
    public int insertProductItineraryHotel(ProductItineraryHotel model);

    /**
     * 获得产品行程描述酒店信息
     * @return
     */
    public ProductItineraryHotel getProductItineraryHotel(int itineraryId);

    /**
     * 插入产品行程描述交通信息
     * @param model
     * @return
     */
    public int insertProductItineraryTraffic(ProductItineraryTraffic model);

    /**
     * 获得产品行程描述交通信息
     * @return
     */
    public ProductItineraryTraffic getProductItineraryTraffic(int itineraryId);

    /**
     * 插入产品图片信息
     * @param model
     * @return
     */
    public int insertProductPhoto(ProductPhoto model);

    /**
     * 获得产品行程描述交通信息
     * @return
     */
    public List<ProductPhoto> getProductPhoto(String productCode);

    /**
     * 插入产品规格信息
     * @param model
     * @return
     */
    public int insertProductSpecfication(ProductSpecfication model);

    /**
     * 获得产品产品规格信息
     * @return
     */
    public List<ProductSpecfication> getProductSpecfication(String productCode);

    /**
     * 插入销售项目详细信息
     * @param model
     * @return
     */
    public int insertSaleItemDetail(SaleItemDetail model);

    /**
     * 获得产品销售项目详细信息
     * @return
     */
    public List<SaleItemDetail> getSaleItemDetail(String productCode);

    /**
     * 插入销售项目附加信息
     * @param model
     * @return
     */
    public int insertSaleItemAdditionalOption(SaleItemAdditionalOption model);

    /**
     * 插入销售项目自取地址信息
     * @param model
     * @return
     */
    public int insertSaleItemAddressDetail(SaleItemAddressDetail model);

    /**
     * 插入销售项目凭证信息
     * @param model
     * @return
     */
    public int insertSaleItemVoucherInfo(SaleItemVoucherInfo model);

    /**
     * 获得产品销售项目详细信息
     * @return
     */
    public SaleItemVoucherInfo getSaleItemVoucherInfo(String saleCode);

    /**
     * 获取接送信息
     * @return
     */
    public List<PickDropModel> getPickDrop(String productCode);

    /**
     * 获得产品行程酒店图片
     * @return
     */
    public List<ProductPhoto> getPhotoByItinerariesId(String itinerariesId);

    /**
     * 获取所有问题
     * @param productCode
     * @return
     */
    public List<ProductBookQuestion> getQuestion(String productCode);

    /**
     * 根据问题获取答案
     * @param productCode
     * @param questionId
     * @return
     */
    public List<ProductBookQuestion> getQuestionAnswer(String productCode,String questionId);

    /**
     * 删除产品信息
     * @param productCode
     */
    public void deleteProductInfo(String productCode);

    /**
     * 删除预定问题
     * @param productCode
     */
    public void deleteProductBookQuestion(String productCode);

    /**
     * 删除产品描述
     * @param productCode
     */
    public void deleteProductDescn(String productCode);

    /**
     * 删除产品扩展信息
     * @param productCode
     */
    public void deleteProductExtendPropertie(String productCode);

    /**
     * 删除产品附加信息
     * @param productCode
     */
    public void deleteProductInclude(String productCode);

    /**
     * 删除产品行程信息
     * @param productCode
     */
    public void deleteProductItinerary(String productCode);

    /**
     * 删除产品行程酒店
     * @param productCode
     */
    public void deleteProductItineraryHotel(String productCode);

    /**
     * 删除产品行程交通信息
     * @param productCode
     */
    public void deleteProductItineraryTraffic(String productCode);

    /**
     * 删除产品图片信息
     * @param productCode
     */
    public void deleteProductPhoto(String productCode);

    /**
     * 删除产品规格
     * @param productCode
     */
    public void deleteProductSpecfication(String productCode);

    /**
     * 删除产品销售项目
     * @param productCode
     */
    public void deleteSaleItemDetail(String productCode);

    /**
     * 删除产品销售附加信息
     * @param productCode
     */
    public void deleteSaleItemAdditionalOption(String productCode);

    /**
     * 删除产品销售自取地址细腻
     * @param productCode
     */
    public void deleteSaleItemAddressDetail(String productCode);

    /**
     * 删除产品凭证信息
     * @param productCode
     */
    public void deleteSaleItemVoucherInfo(String productCode);

    /**
     * 根据产品code获取json的信息
     * @param productCode
     * @return
     */
    public Lastminute_all getInfoByProductCode(String productCode);

    /**
     * 执行插入产品数据
     * @param productCode
     * @param status
     */
    public void insertProduct(String productCode,String status);

    /**
     * 根据销售code获取销售项目信息
     * @param saleCode
     * @return
     */
    public SaleItemDetail getSaleItemDetailBySaleCode(String saleCode);

    /**
     * 根据产品code,销售code获取价格日历信息
     *
     * @param productCode
     * @return
     */
    public Map<String,List<Lastminute_category>> getPriceBySaleCode(String productCode,String saleCode,String codeSpecficatioinId);

    /**
     * 获取套餐名称
     * @return 返回套餐名称
     */
    public List<SaleItemDetail> getSaleNameMap();

}
